/**
 * ControladoraBDPersonalAdm.java
 */

/**
 *  AdSec: Administrador de Secundarias
 *  Copyright (C) 2009 Daniela Ramírez Chaves (dannyrch@gmail.com)
 *  Copyright (C) 2009 Leonel Salazar Valverde (leo87sv@gmail.com)
 *
 *  This file is part of AdSec.
 *  AdSec is free software: you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation, either version 3 of the License, or
 *  (at your option) any later version.
 *
 *  AdSec is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with AdSec.  If not, see <http://www.gnu.org/licenses/>.
 */

package adsec.datos;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.ResultSet;
import java.util.LinkedList;
import adsec.entidades.PersonalAdm;


public class ControladoraBDPersonalAdm {

    private Connection conexion;
    private AdministradorConexion adminConexion;
    
    public ControladoraBDPersonalAdm(){
        adminConexion = AdministradorConexion.getInstancia();
    }

    public PersonalAdm consultarPersonalAdm(String cedula){
        PersonalAdm personalAdm = null;
        conexion = adminConexion.getConexion();
        if(conexion != null){
            CallableStatement procedimiento = this.spConsultarPersonalAdm(conexion, cedula);
            if(procedimiento != null){
                try{
                    procedimiento.execute();
                    ResultSet resultado = procedimiento.getResultSet();
                    if(resultado.next())
                        personalAdm = this.crearPersonalAdm(resultado);
                }catch(SQLException e){
                    e.printStackTrace();
                }//fin de try catch
            }//fin de if
        }//fin de if
        adminConexion.cerrarConexion();
        return personalAdm;
    }//fin de consultarEstudiante

    public LinkedList<PersonalAdm> consultarPersonalAdms(){
        LinkedList<PersonalAdm> lista = new LinkedList<PersonalAdm>();
        conexion = adminConexion.getConexion();
        if(conexion != null){
            CallableStatement procedimiento = this.spConsultarPersonalAdms(conexion);
            if(procedimiento != null){
                try{
                    procedimiento.execute();
                    ResultSet resultado = procedimiento.getResultSet();
                    while(resultado.next()){
                        PersonalAdm personalAdm = this.crearPersonalAdmLight(resultado);
                        lista.add(personalAdm);
                    }//fin de while
                }catch(SQLException e){
                    e.printStackTrace();
                }//fin de try catch
            }//fin de if
        }//fin de if
        adminConexion.cerrarConexion();
        return lista;
    }//fin de consultarPersonalAdms

    public int insertarPersonalAdm(PersonalAdm personalAdm){
        int resultado = AdministradorConexion.QUERY_ERROR;
        conexion = adminConexion.getConexion();
        if(conexion != null){
            CallableStatement procedimiento = this.spInsertarPersonalAdm(conexion, personalAdm);
            if(procedimiento != null){
                try{
                    procedimiento.execute();
                    resultado = AdministradorConexion.QUERY_OK;
                }catch(SQLException e){
                    e.printStackTrace();
                }//fin de try catch
            }//fin de if
        }//fin de if
        adminConexion.cerrarConexion();
        return resultado;
    }//fin de insertarPersonalAdm

    public int modificarPersonalAdm(PersonalAdm personalAdm){
        int resultado = AdministradorConexion.QUERY_ERROR;
        conexion = adminConexion.getConexion();
        if(conexion != null){
            CallableStatement procedimiento = this.spModificarPersonalAdm(conexion, personalAdm);
            if(procedimiento != null){
                try{
                    procedimiento.execute();
                    resultado = AdministradorConexion.QUERY_OK;
                }catch(SQLException e){
                    e.printStackTrace();
                }//fin de try catch
            }//fin de if
        }//fin de if
        adminConexion.cerrarConexion();
        return resultado;
    }//fin de modificarPersonalAdm

    public int eliminarPersonalAdm(String cedula){
        int resultado = AdministradorConexion.QUERY_ERROR;
        conexion = adminConexion.getConexion();
        if(conexion != null){
            CallableStatement procedimiento = this.spEliminarPersonalAdm(conexion, cedula);
            if(procedimiento != null){
                try{
                    procedimiento.execute();
                    resultado = AdministradorConexion.QUERY_OK;
                }catch(SQLException e){
                    e.printStackTrace();
                }//fin de try catch
            }//fin de if
        }//fin de if
        adminConexion.cerrarConexion();
        return resultado;
    }//fin de eliminarPersonalAdm

    private CallableStatement spConsultarPersonalAdm(Connection conexion, String cedula){
        CallableStatement procedimiento = null;
        try{
            procedimiento = conexion.prepareCall("CALL consultarPersonalAdm" + UtilidadesCapaDatos.agregarParametros(1),
                ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
            procedimiento.setString(PersonalAdm.cedulaNC+"_p", cedula);
        }catch(SQLException sqlException){
            sqlException.printStackTrace();
        }
        return procedimiento;
    }//fin de spConsultarPersonalAdm
    
    private CallableStatement spConsultarPersonalAdms(Connection conexion){
        CallableStatement procedimiento = null;
        try{
            procedimiento = conexion.prepareCall("CALL consultarPersonalAdms()",
                ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
        }catch(SQLException sqlException){
            sqlException.printStackTrace();
        }
        return procedimiento;
    }//fin de spConsultarPersonalAdms
    
    private CallableStatement spInsertarPersonalAdm(Connection conexion, PersonalAdm personalAdm){
        CallableStatement procedimiento = null;
        try{
            procedimiento = conexion.prepareCall("CALL insertarPersonalAdm" + UtilidadesCapaDatos.agregarParametros(15),
                ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
            procedimiento.setString(PersonalAdm.cedulaNC+"_p", personalAdm.getCedula());
            procedimiento.setString(PersonalAdm.nombreNC+"_p", personalAdm.getNombre());
            procedimiento.setString(PersonalAdm.apellidosNC+"_p", personalAdm.getApellidos());
            procedimiento.setDate(PersonalAdm.fechaNacNC+"_p", personalAdm.getFechaNac());
            procedimiento.setString(PersonalAdm.telefono1NC+"_p", personalAdm.getTelefono1());
            procedimiento.setString(PersonalAdm.telefono2NC+"_p", personalAdm.getTelefono2());
            procedimiento.setString(PersonalAdm.sexoNC+"_p", personalAdm.getSexo());
            procedimiento.setString(PersonalAdm.nacionalidadNC+"_p", personalAdm.getNacionalidad());
            procedimiento.setString(PersonalAdm.provinciaNC+"_p", personalAdm.getProvincia());
            procedimiento.setString(PersonalAdm.cantonNC+"_p", personalAdm.getCanton());
            procedimiento.setString(PersonalAdm.distritoNC+"_p", personalAdm.getDistrito());
            procedimiento.setString(PersonalAdm.otrasSeniasNC+"_p", personalAdm.getOtrasSenias());
            procedimiento.setString(PersonalAdm.puestoNC+"_p", personalAdm.getPuesto());
            procedimiento.setInt(PersonalAdm.horasAsignadasNC+"_p", personalAdm.getHorasAsignadas());
            procedimiento.setBoolean(PersonalAdm.propiedadNC+"_p", personalAdm.isPropiedad());
        }catch(SQLException sqlException){
            sqlException.printStackTrace();
        }
        return procedimiento;
    }//fin de spInsertarPersonalAdm

    private CallableStatement spModificarPersonalAdm(Connection conexion, PersonalAdm personalAdm){
        CallableStatement procedimiento = null;
        try{
            procedimiento = conexion.prepareCall("CALL modificarPersonalAdm" + UtilidadesCapaDatos.agregarParametros(15),
                ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
            procedimiento.setString(PersonalAdm.cedulaNC+"_p", personalAdm.getCedula());
            procedimiento.setString(PersonalAdm.nombreNC+"_p", personalAdm.getNombre());
            procedimiento.setString(PersonalAdm.apellidosNC+"_p", personalAdm.getApellidos());
            procedimiento.setDate(PersonalAdm.fechaNacNC+"_p", personalAdm.getFechaNac());
            procedimiento.setString(PersonalAdm.telefono1NC+"_p", personalAdm.getTelefono1());
            procedimiento.setString(PersonalAdm.telefono2NC+"_p", personalAdm.getTelefono2());
            procedimiento.setString(PersonalAdm.sexoNC+"_p", personalAdm.getSexo());
            procedimiento.setString(PersonalAdm.nacionalidadNC+"_p", personalAdm.getNacionalidad());
            procedimiento.setString(PersonalAdm.provinciaNC+"_p", personalAdm.getProvincia());
            procedimiento.setString(PersonalAdm.cantonNC+"_p", personalAdm.getCanton());
            procedimiento.setString(PersonalAdm.distritoNC+"_p", personalAdm.getDistrito());
            procedimiento.setString(PersonalAdm.otrasSeniasNC+"_p", personalAdm.getOtrasSenias());
            procedimiento.setString(PersonalAdm.puestoNC+"_p", personalAdm.getPuesto());
            procedimiento.setInt(PersonalAdm.horasAsignadasNC+"_p", personalAdm.getHorasAsignadas());
            procedimiento.setBoolean(PersonalAdm.propiedadNC+"_p", personalAdm.isPropiedad());
        }catch(SQLException sqlException){
            sqlException.printStackTrace();
        }
        return procedimiento;
    }//fin de spModificarPersonalAdm
    
    private CallableStatement spEliminarPersonalAdm(Connection conexion, String cedula){
        CallableStatement procedimiento = null;
        try{
            procedimiento = conexion.prepareCall("CALL eliminarPersonalAdm" + UtilidadesCapaDatos.agregarParametros(1),
                ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
            procedimiento.setString(PersonalAdm.cedulaNC+"_p", cedula);
        }catch(SQLException sqlException){
            sqlException.printStackTrace();
        }
        return procedimiento;
    }//fin de spEliminarPersonalAdm
    
    private PersonalAdm crearPersonalAdm(ResultSet resultSet) throws SQLException{
        PersonalAdm personalAdm = new PersonalAdm();
        personalAdm.setCedula(resultSet.getString(PersonalAdm.cedulaNC));
        personalAdm.setNombre(resultSet.getString(PersonalAdm.nombreNC));
        personalAdm.setApellidos(resultSet.getString(PersonalAdm.apellidosNC));
        personalAdm.setFechaNac(resultSet.getDate(PersonalAdm.fechaNacNC));
        personalAdm.setTelefono1(resultSet.getString(PersonalAdm.telefono1NC));
        personalAdm.setTelefono2(resultSet.getString(PersonalAdm.telefono2NC));
        personalAdm.setSexo(resultSet.getString(PersonalAdm.sexoNC));
        personalAdm.setNacionalidad(resultSet.getString(PersonalAdm.nacionalidadNC));
        personalAdm.setProvincia(resultSet.getString(PersonalAdm.provinciaNC));
        personalAdm.setCanton(resultSet.getString(PersonalAdm.cantonNC));
        personalAdm.setDistrito((resultSet.getString(PersonalAdm.distritoNC)));
        personalAdm.setOtrasSenias(resultSet.getString(PersonalAdm.otrasSeniasNC));
        personalAdm.setPuesto(resultSet.getString(PersonalAdm.puestoNC));
        personalAdm.setHorasAsignadas(resultSet.getInt(PersonalAdm.horasAsignadasNC));
        personalAdm.setPropiedad(resultSet.getBoolean(PersonalAdm.propiedadNC));

        return personalAdm;
    }//fin de crearPersonalAdm

    private PersonalAdm crearPersonalAdmLight(ResultSet resultSet) throws SQLException{
        PersonalAdm personalAdm = new PersonalAdm();
        personalAdm.setCedula(resultSet.getString(PersonalAdm.cedulaNC));
        personalAdm.setNombre(resultSet.getString(PersonalAdm.nombreNC));
        personalAdm.setApellidos(resultSet.getString(PersonalAdm.apellidosNC));
        personalAdm.setTelefono1(resultSet.getString(PersonalAdm.telefono1NC));
        personalAdm.setPuesto(resultSet.getString(PersonalAdm.puestoNC));
        
        return personalAdm;
    }//fin de crearPersonalAdm

}//fin de la clase ControladoraBDPersonalAdm
